//#ifndef DICTIONARY_MANAGER_H
//#define DICTIONARY_MANAGER_H
//
//#include <iostream>
//#include <vector>
//#include <map>
//#include <string>
//#include "../entities/DatabaseEntities.h"
//
//using namespace std;
//using namespace dbms::entities;
//
//namespace dbms {
//    namespace managers {
//
//        // ROID����ö��
//        enum RoidType {
//            DatabaseRoid,
//            UserRoid,
//            AttributeRoid,
//            ClassRoid
//        };
//
//        // �����ֵ��������
//        class DictionaryManager {
//        private:
//            static DictionaryManager* instance;
//            static string currentSchema;
//            static map<int, pair<RoidType, string>> roidMap;
//
//            // ����ʵ�����͵ĵ�һ��ҳ��ID
//            string userBlock1;
//            string databaseBlock1;
//            string classBlock1;
//            string attributeBlock1;
//            string indexBlock1;
//
//            DictionaryManager() = default;
//            DictionaryManager(const DictionaryManager&) = delete;
//            DictionaryManager& operator=(const DictionaryManager&) = delete;
//
//        public:
//            static DictionaryManager* getInstance();
//            static void release();
//
//            // ��ʼ������
//            void initialize();
//            void initializeDictionary();
//            void initializeMapping();
//            void storeMapping();
//
//            // OID����
//            int deliverOid();
//
//            // ʵ�崴����������
//            User* createUser();
//            Database* createDatabase();
//            Class* createClass();
//            Attribute* createAttribute();
//            Index* createIndex();
//
//            // ��ѯ����
//            User* getUser(const string& username);
//            Database* getDatabase(User* user, const string& dbname);
//            vector<Database*> getDatabases(User* user);
//            Class* getClass(Database* database, const string& relationName);
//            vector<Class*> getClasses(Database* database);
//            vector<Attribute*> getAttributes(Class* table);
//            Attribute* getAttribute(int attributeId);
//            vector<Attribute*> getAttributes(Index* index);
//            Index* getIndex(Class* table);
//
//            // �洢����
//            void storeUser(User* user);
//            void storeDatabase(Database* database);
//            void storeClass(Class* cls);
//            void storeAttribute(Attribute* attribute);
//            void storeIndex(Index* index);
//
//            // ���·���
//            void updateUser(User* user);
//            void updateDatabase(Database* database);
//            void updateClass(Class* cls);
//            void updateAttribute(Attribute* attribute);
//
//            // Schema����
//            static void setCurrentSchema(const string& schema) { currentSchema = schema; }
//            static string getCurrentSchema() { return currentSchema; }
//
//            // ���߷���
//            static string getRowId(int oid);
//
//            // �в��Ҹ�������
//            Attribute* findColumn(Class* cls, const vector<Attribute*>& attrs, const char* colName);
//            string columnNotExistError(const char* colName, int line, int col);
//        };
//
//    } // namespace managers
//} // namespace dbms
//
////#endif // DICTIONARY_MANAGER_H